package thread;

/**
 * 创建线程的第一种方式
 * 继承Thread类
 */
public class ThreadDemo {
    public static void main(String[] args) {
       // 2 创建线程对象
        MyThread01 myThread01 = new MyThread01();
        //myThread01.run();
        // 3 线程启动 start() 方法，而不是 用对象调用它的run()方法
        myThread01.start();
        MyThread02 myThread02 = new MyThread02();
        myThread02.start();
        // 匿名内部类 创建线程
        //继承Thread重写run方法
        Thread t1 = new Thread(){
                public void run(){
                for (int i = 0; i < 1000; i++) {
                    System.out.println("我是修锁的~~~~");
                }
            }

        };
        t1.start();


        System.out.println("程序结束");
    }
}
// 1 写一个类 集成 Thread， 然后 重写run方法，run方法里面就是你要执行的现场任务
class MyThread01 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("你是谁啊！！！！");
        }
    }
}
/**
 * 第一种创建线程的方式的优点:结构简单，利于匿名内部类创建
 * 缺点:
 * 1:存在继承冲突问题，由于java是单继承的，这导致如果我们继承了Thread就无法再
 *   继承其他类去复用方法。这在实际开发中是极其不方便的
 * 2:当我们继承Thread并重写run方法，在run方法中定义线程要执行的任务。这会导致
 *   线程与任务存在一个必然的耦合关系，不利于线程的重用。
 */
class MyThread02 extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("请开门，查水表的！！！");
        }
    }
}